console.clear();

// import './UiSize.ts'
import './Progress.ts'

const mainScreen = UiScreen.getAllScreen().find(obj => obj.name === 'screen')
const image1 = UiScreen.getAllScreen().find(obj => obj.name === 'screen')?.findChildByName<UiImage>("image-1")
if (mainScreen && image1) {
    mainScreen.visible = true;
    image1.visible = true
}


//----------TELEPORT----------//

// 使用WeakMap安全存储UI元素的目标位置，避免直接修改对象属性
const photoTargetPositions = new WeakMap<UiImage, number>();

// 假设 screenWidth 是全局可访问的，它代表当前屏幕的宽度。
// 在实际项目中，你需要确保 screenWidth 的正确来源，例如从游戏环境或 UI 系统获取。
declare const screenWidth: number;

/**
 * 缓动函数：四次方缓入缓出 (easeInOutQuad)
 * 这个函数使得动画在开始和结束时速度较慢，中间速度较快，提供更自然的视觉效果。
 * @param progress 动画的当前进度，范围从 0 (开始) 到 1 (结束)。
 * @returns 经过缓动计算后的进度值。
 */
function easeInOutQuad(progress: number): number {
    return progress < 0.5
        ? 2 * progress * progress
        : 1 - Math.pow(-2 * progress + 2, 2) / 2;
}


async function JumpUi(Photo: any) {
    // 检查传入的 UI 元素是否有效
    if (!Photo) {
        console.warn("JumpUi: 传入的 Photo UI 元素无效，无法执行动画。");
        return;
    }

    // 1. 保存 Photo 元素当前的 X 坐标。
    // 这是 Photo 元素在动画结束时应该到达的“合适位置”。
    const targetX = Photo.position.offset.x;
    // 使用WeakMap存储目标位置，避免修改原始对象
    photoTargetPositions.set(Photo, targetX);

    // 2. 获取当前屏幕宽度。
    // 如果 screenWidth 未定义，提供一个默认值（例如 800），以确保代码健壮性。
    const currentScreenWidth = screenWidth || 800;

    // 3. 将 Photo 元素的初始位置设置到屏幕右侧之外。
    // 这样，动画开始时它将从屏幕外进入。
    Photo.position.offset.x = currentScreenWidth;
    Photo.visible = true; // 确保 UI 元素在动画开始时是可见的

    // 4. 定义缓入速度变量 InSpeed。
    // 这个值表示每次动画更新时，动画进度增加的量。
    // 值越大，动画完成得越快。
    const InSpeed = 0.05; // 每次步进 5% 的进度，意味着动画将在约 20 步内完成 (1 / 0.05 = 20)。

    let currentProgress = 0; // 初始化动画进度
    let animationIntervalId: number | undefined; // 用于存储定时器 ID，以便后续清除

    // 定义动画帧函数
    const animate = () => {
        // 动画过程中检查对象是否存在
        if (!Photo) {
            if (animationIntervalId !== undefined) {
                if (animationIntervalId !== undefined) {
                    clearInterval(animationIntervalId);
                    animationIntervalId = undefined; // 清除后重置定时器ID
                }
                animationIntervalId = undefined; // 清除后重置定时器ID
            }
            return;
        }
        currentProgress += InSpeed; // 增加动画进度

        // 确保进度不超过 1，并在动画结束时清除定时器
        if (currentProgress >= 1) {
            currentProgress = 1; // 将进度锁定在 1
            if (animationIntervalId !== undefined) {
                clearInterval(animationIntervalId); // 动画完成，停止循环
            }
        }

        // 应用缓动函数，使动画效果更平滑自然
        const easedProgress = easeInOutQuad(currentProgress);

        // 计算当前 X 坐标：
        // 动画从屏幕右侧 (currentScreenWidth) 开始，向目标位置 (targetX) 移动。
        // easedProgress 决定了当前位置在起始和目标位置之间的比例。
        const currentX = currentScreenWidth + (targetX - currentScreenWidth) * easedProgress;

        // 更新 Photo 元素的位置
        Photo.position.offset.x = currentX;

        // 动画完成时的日志输出
        if (currentProgress === 1) {
            console.log('Finished')
        }

    };

    // 5. 启动动画循环。
    // 每 16 毫秒执行一次 animate 函数，这大致模拟了 60 帧每秒 (FPS) 的动画效果。（神岛？哪有那么高）
    animationIntervalId = setInterval(animate, 16);
}






const teleportScreen = UiScreen.getAllScreen().find(obj => obj.name === 'Teleport')
const Photo = teleportScreen?.findChildByName<UiImage>("Photo")
const Hold = UiScreen.getAllScreen().find(obj => obj.name === 'Teleport')?.findChildByName<UiImage>("Photo")?.findChildByName<UiImage>("Hold")


if (teleportScreen && Photo && Hold) {
    teleportScreen.visible = false
    Photo.image = 'picture/星茶会·遇见蓝海介绍.png'
    Photo.visible = true
    Hold.visible = true
}
remoteChannel.events.on("client", (arg) => {
    if (!teleportScreen || !Photo || !Hold) return
    if (arg === 'AreaLeave') {
        // 区块退出
        if (Photo) {
            teleportScreen.visible = false
        }
    } else {
        teleportScreen.visible = true
        if (arg === 'showAreaEnter') {
            // 宣传区块进入
            JumpUi(Photo)
            Photo.image = 'picture/Q群.png'
        } else if (arg === 'liuAreaEnter') {
            // 流璃awa区块进入
            JumpUi(Photo)
            Photo.image = 'picture/星茶会·遇见蓝海介绍.png'
        } else if (arg === 'SISAreaEnter') {
            // Star_Ink_sans区块进入
            JumpUi(Photo)
            Photo.image = 'picture/SIS.png'
        } else if (arg === 'DuckAreaEnter') {
            // 鹅玎鸭区块进入
            JumpUi(Photo)
            Photo.image = 'picture/鸭.png'
        } else if (arg === 'PandaAreaEnter') {
            // 黑客熊猫区块进入
            JumpUi(Photo)
            Photo.image = 'picture/黑客熊猫.png'
        } else {
            // 更新加载图片
            Hold.visible = true
            Hold.image = `picture/${arg}.png`
        }
    }

})
//----------TELEPORT----------//